home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-01-04 | 56.3 KB | 1,135 lines |
- VESA Super VGA Standard
- Video Electronics Standards Association
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 2150 North First Street, Suite 360 Phone: (408) 435-0333
- San Jose, CA 95131-2020 Fax: (408) 435-8225
-
- Super VGA BIOS Extension
- Standard #VS911022
- October 22, 1991
- Document Version 1.0
- VBE Version 1.2
-
- PURPOSE
- ~~~~~~~
- To standardize a common software interface to Super VGA video adapters in order
- to provide simplified software application access to advanced VGA products.
-
- SUMMARY
- ~~~~~~~
- The standard provides a set of functions which an application program can use
- to A) obtain information about the capabilities and characteristics of a
- specific Super VGA implementation and B) to control the operation of such
- hardware in terms of video mode initialization and video memory access. The
- functions are provided as an extension to the VGA BIOS video services, accessed
- through interrupt 10h.
-
- VESA Super VGA Standard VS911022-2
-
- Contents
- ~~~~~~~~
- 1. Introduction ................................................. Page 3
-
- 2. Goals and Objectives ......................................... 4
- 2.1 Video environment information ........................ 4
- 2.2 Programming support .................................. 4
- 2.3 Compatibility ........................................ 5
- 2.4 Scope of standard .................................... 5
-
- 3. Standard VGA BIOS ............................................ 6
-
- 4. Super VGA Mode Numbers ....................................... 7
-
- 5. CPU Video Memory Control ..................................... 9
- 5.1 Hardware design consideration ........................ 9
- 5.1.1 Limited to 64k/128k of CPU address space ..... 9
- 5.1.2 Crossing CPU video memory window boundaries .. 10
- 5.1.3 Operating on data frolm different areas ...... 10
- 5.1.4 Combining data from two different windows .... 10
- 5.2 Different types of hardware windows .................. 11
- 5.2.1 Single window systems ........................ 11
- 5.2.2 Dual window systems .......................... 11
-
- 6. Extended VGA BIOS ............................................ 12
- 6.1 Status Information ................................... 12
- 6.2 00h - Return Super VGA Information ................... 12
- 6.3 01h - Return Super VGA mode information .............. 14
- 6.4 02h - Set Super VGA mode ............................. 20
- 6.5 03h - Return Super VGA mode .......................... 20
- 6.6 04h - Save/restore Super VGA video state ............. 21
- 6.7 05h - Super VGGA video memory window control ......... 22
- 6.8 06h - Set/Get Logical Scan Line Length ............... 23
- 6.9 07h - Set/Get Display Start .......................... 24
- 6.10 08h - Set/Get DAC Palette Control .................... 25
-
- 7. Application Example .......................................... 26
-
- VESA Super VGA Standard VS911022-3
-
- 1. Introduction
- ~~~~~~~~~~~~~~~~~~~~
- This document contains a specification for a standardized interface to extended
- VGA video modes and functions. The specification consists of mechanisms for
- supporting standard extended video modes and functions that have been approved
- by the main VESA committee and non-standard video modes that an individual VGA
- supplier may choose to add, in a uniform manner that application software can
- utilize without having to understand the intricate details of the particular VGA
- hardware.
-
- The primary topics of this specification are definitions of extended VGA video
- modes and the functions necessary for application software to understand the
- characteristics of the video mode and manipulate the extended memory associated
- with the video mode.
-
- Readers of this document should already be familiar with programming VGAs at the
- hardware level and Intel iAPX real mode assembly language. Readers who are
- unfamiliar with programming the VGA should first read one of the many VGA
- programming tutorials before attempting to understand these extensions to the
- standard VGA.
-
- VESA Super VGA Standard VS911022-4
-
- 2. Goals and Objectives
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- The IBM VGA has become a defacto standard in the PC graphics world. A multitude
- of different VGA offerings exist in the marketplace, each one providing BIOS or
- register compatibility with the IBM VGA. More and more of these VGA compatible
- products implements various supersets of the VGA standard. These extensions
- range from higher resolutions and more colors to improved performance and even
- some graphics processing capabilities. Intense competition has dramatically
- improved the price/performance ratio, to the benefit of the end user.
-
- However, several serious problems face a software developer who intends to take
- advantage of these "Super VGA" environments. Because there is no standard
- hardware implementation, the developer is faced with widely disparate Super VGA
- hardware architectures. Lacking a common software interface, designing
- applications for these environments is costly and technically difficult. Except
- for applications supported by OEM-specific display drivers, very few software
- packages can take advantage of the power and capabilities of Super VGA products.
-
- The purpose of the VESA VGA BIOS Extension is to remedy this situation. Being a
- common software interface to Super VGA graphics products, the primary objective
- is to enable application and system software to adapt to and exploit the wide
- range of features available in these VGA extensions.
-
- Specifically, the VESA BIOS Extension attempts to address the following issues:
- A) Return information about the video environment to the application, and B)
- Assist the application in initializing and programming the hardware.
-
- 2.1 Video environment information
-
- Today, an application has no standard mechanism to determine what Super VGA
- hardware it is running on. Only by knowing OEM-specific features can an
- application determine the presence of a particular video board. This often
- involves reading and testing registers located at I/O addresses unique to each
- OEM. By not knowing what hardware an application is running on, few, if any, of
- the extended features of the underlying hardware can be used.
-
- The VESA BIOS Extension provides several functions to return information about
- the video environment. These functions return system level information as well
- as video mode specific details. Function 00h returns general system level
- information, including an OEM identification string. The function also returns
- a pointer to the supported video modes. Function 01h may be used by the
- application to obtain information about each supported video mode. Function 03h
- returns the current video mode.
-
- VESA Super VGA Standard VS911022-5
-
- 2.2 Programming support
-
- Due to the fact that different Super VGA products have different hardware
- implementations, application software has great difficulty in adapting to each
- environment. However, since each is based on the VGA hardware architecture,
- differences are most common in video mode initialization and memory mapping.
- The rest of the architecture is usually kept intact, including I/O mapped
- registers, video buffer location in the CPU address space, DAC location and
- function, etc.
-
- The VESA BIOS Extension provides several functions to interface to the different
- Super VGA hardware implementations. The most important of these is Function
- 02h, Set Super VGA video mode. This function isolates the application from the
- tedious and complicated task of setting up a video mode. Function 05h provides
- an interface to the underlying memory mapping hardware. Function 04h enables an
- application to save and restore a Super VGA state without knowing anything of
- the specific implementation.
-
- 2.3 Compatibility
-
- A primary design objective of the VESA BIOS Extension is to preserve maximum
- compatibility to the standard VGA environment. In no way should the BIOS
- extensions compromise compatibility or performance. Another but related concern
- is to minimiza the changes necessary to an existing VGA BIOS. Ram, as well as
- ROM-based implementations of the BIOS extension should be possible.
-
- 2.4 Scope of standard
-
- The purpose of the VESA BIOS Extension is to provide support for extended VGA
- environments. Thus, the underlying hardware architecture is assumed to be a
- VGA. Graphics software that drives a Super VGA board will perform its graphics
- output in generally the same way it drives a standard VGA, i.e. writing directly
- to a VGA style frame buffer, manipulating graphics controller registers,
- directly programming the palette, etc. No significant graphics processing will
- be done in hardware. For this reason, the VESA BIOS Extension does not provide
- any graphics output functions, such as BitBlt, line or circle drawing, etc.
-
- An important constraint of the functionalities that can be placed into the VESA
- BIOS Extension is that ROM space is severely limited in certain existing BIOS
- implementations.
-
- Outside the scope of this VESA BIOS Extension is the handling of different
- monitors and monitor timings. Such items are dealt with in other VESA fora.
- The purpose of the VESA BIOS Extension is to provide a standardized software
- interface to Super VGA graphics modes, independent of monitor and monitor timing
- issues.
-
- VESA Super VGA Standard VS911022-6
-
- 3. Standard VGA BIOS
- ~~~~~~~~~~~~~~~~~~~~~~~~~
- A primary design goal with the VESA BIOS Extension is to minimize the effects on
- the standard VGA BIOS. Standard VGA BIOS functions should need to be modified
- as little as possible. This is important since ROM, as well as RAM based
- versions of the extensions, may be implemented.
-
- However, two standard VGA BIOS functions are affected by the VESA extension.
- These are Function 00h (Set video mode) and Function 0Fh (Read current video
- state). VESA-aware applications will not set the video mode using VGA BIOS
- function 00h. Nor will such applications use VGA BIOS function 0Fh. VESA BIOS
- functions 02h (Set Super VGA mode) and 03h (Get Super VGA mode) will be used
- instead.
-
- However, VESA-unaware applications (such as old Pop-Up programs and other TSRs,
- or the CLS command of MS-DOS), might use VGA BIOS function 0Fh to get the
- present video mode. Later it may call VGA BIOS function 00h to
- restore/reinitialize the old video mode.
-
- To make such applications work, VESA recommends that whatever value returned by
- VGA BIOS function 0Fh (it is up to the OEM to define this number) should be used
- to reinitialize the video mode through VGA BIOS function 00h. Thus, the BIOS
- should keep track of the last Super VGA mode in effect.
-
- It is recommended, but not mandatory, to support output functions (such as
- TTY-output, scroll, set pixel, etc.) in Super VGA modes. If the BIOS extension
- doesn't support such output functions, bit D2 (Output functions supported) of
- the ModeAttributes field (returned by VESA BIOS function 01h) should be clear.
-
- VESA Super VGA Standard VS911022-7
-
- 4. Super VGA mode numbers
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Standard VGA mode numbers are 7 bits wide and presently range from 00h to 13h.
- OEMs have defined extended video modes in the range 14h to 7Fh. Values in the
- range 80h to FFh cannot be used, since VGA BIOS function 00h (Set video mode)
- interprets bit 7 as a flag to clear/not clear video memory.
-
- Due to the limitations of 7 bit mode numbers, VESA video mode numbers are 15
- bits wide. To initialize a Super VGA mode, its number is passed in the BX
- register to VESA BIOS function 02h (Set Super VGA mode).
-
- The format of VESA mode numbers is as follows:
-
- D0-D8 = Mode number
- If D8 == 0, this is not a VESA defined mode
- If D8 == 1, this is a VESA defined mode
- D9-D14 = Reserved by VESA for future expansion (= 0)
- D15 = Reserved (= 0)
-
- Thus, VESA mode numbers begin at 100h. This mode numbering scheme implements
- standard VGA mode numbers as well as OEM-defined mode numbers as subsets of the
- VESA mode number. That means that regular VGA modes may be initialized through
- VESA BIOS function 02h (Set Super VGA mode), simply by placing the mode number
- in BL and clearing the upper byte (BH). OEM-defined modes may be initialized in
- the same way.
-
- To date, VESA has defined a 7-bit video mode number, 6Ah, for the 800x600,
- 16-color, 4-plane graphics mode. The corresponding 15-bit mode number for this
- mode is 102h.
-
- The following VESA mode numbers have been defined:
-
- GRAPHICS TEXT
-
- 15-bit 7-bit Resolution Colors 15-bit 7-bit Columns Rows
- mode mode mode mode
- number number number number
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 100h - 640x400 256 108h - 80 60
- 101h - 640x480 256
- 109h - 132 25
- 102h 6Ah 800x600 16 10Ah - 132 43
- 103h - 800x600 256 10Bh - 132 50
- 10Ch - 132 60
- 104h - 1024x768 16
- 105h - 1024x768 256
-
- 106h - 1280x1024 16
- 107h - 1280x1024 256
-
- VESA Super VGA Standard VS911022-8
-
- 10Dh - 320x200 32K (1:5:5:5)
- 10Eh - 320x200 64K (5:6:5)
- 10Fh - 320x200 16.8M (8:8:8)
- 110h - 640x480 32K (1:5:5:5)
- 111h - 640x480 64K (5:6:5)
- 112h - 640x480 16.8M (8:8:8)
- 113h - 800x600 32K (1:5:5:5)
- 114h - 800x600 64K (5:6:5)
- 115h - 800x600 16.8M (8:8:8)
- 116h - 1024x768 32K (1:5:5:5)
- 117h - 1024x768 64K (5:6:5)
- 118h - 1024x768 16.8M (8:8:8)
- 119h - 1280x1024 32K (1:5:5:5)
- 11Ah - 1280x1024 64K (5:6:5)
- 11Bh - 1280x1024 16.8M (8:8:8)
-
- VESA Super VGA Standard VS911022-9
-
- 5. CPU Video Memory Windows
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- A standard VGA sub-system provides 256k bytes of memory and a corresponding
- mechanism to address this memory. Super VGAs and their modes require more than
- the standard 256k bytes of memory but also require that the address space for
- this memory be restricted to the standard address space for compatibility
- reasons. CPU video memory windows provide a means of accessing this extended
- VGA memory within the standard CPU address space.
-
- This chapter describes how several hardware implementations of CPU video memory
- windows operate, their impact on application software design, and relates them
- to the software model presented by the VESA VGA BIOS extensions.
-
- The VESA CPU video memory windows functions have been designed to put the
- performance insensitive, non-standard hardware functions into the BIOS while
- putting the performance sensitive, standard hardware functions into the
- application. This provides portability among VGA systems together with the
- performance that comes from accessing the hardware directly. In particular, the
- VESA BIOS is responsible for mapping video memory into the CPU address space
- while the application is responsible for performing the actual memory read and
- write operations.
-
- This combination software and hardware interface is accomplished by informing
- the application of the parameters that control the hardware mechanism of mapping
- the video memory into the CPU address space and then letting the application
- control the mapping within those parameters.
-
- 5.1 Hardware
- 5.1.1 Limited to 64k/128k of CPU address space
-
- The first consideration in implementing extended video memory is to give access
- to the memory to application software.
-
- The standard VGA CPU address space for 16 color graphics modes is typically at
- segment A000h for 64k. This gives access to the 256k bytes of a standard VGA,
- i.e. 64k per plane. Access to the extended video memory is accomplished by
- mapping portions of the video memory into the standard VGA CPU address space.
-
- Every Super VGA hardware implementation provides a mechanism for software to
- specify the offset from the start of video memory which is to be mapped to the
- start of the CPU address space. Providing both read and write access to the
- mapped memory provides a necessary level of hardware support for an application
- to manipulate the extended video memory.
-
- VESA Super VGA Standard VS911022-10
-
- 5.1.2 Crossing CPU video memory window boundaries
-
- The organization of most software algorithms which perform video operations
- consists of a pair of nested loops: and outer loop over rows or scan lines and
- an inner loop across the row or scan line. The latter is the proverbial inner
- loop, which is the bottle neck to high performance software.
-
- If a target rectangle is large enough, or poorly located, part of the required
- memory may be with within the video memory mapped into the CPU address space and
- part of it may not be addressable by the CPU without changing the mapping. It
- is desirable that the test for remapping the video memory is located outside of
- the inner loop.
-
- This is typically accomplished by selecting the mapping offset of the start of
- video memory to the start of the CPU address space so that at least one entire
- row or scan line can be processed without changing the video memory mapping.
- There are currently no Super VGAs that allow this offset to be specified on a
- byte boundary and there is a wide range among Super VGAs in the ability to
- position a desired video memory location at the start of the CPU address space.
-
- The number of bytes between the closest two bytes in video memory that can be
- placed on any single CPU address is defined as the granularity of the window
- function. Some Super VGA systems allow any 4k video memory boundary to be
- mapped to the start of the CPY address space, while other Super VGA systems
- allow any 64k video memory boundary to be mapped to the start of the CPU address
- space. These two example systems would have granularities of 4k and 64k,
- respectively. This concept is very similar to the bytes that can be accessed
- with a 16 bit pointer in an Intel CPU before a segment register must be changed
- (the granularity of the segment register or mapping here is 16 bytes).
-
- Notes
- ~~~~~
- If the granularity is equal to the length of the CPU address space, i.e. the
- least significant address bit of the hardware mapping function is more
- significant than the most significant bit of the CPU address, then the inner
- loop will have to contain the test for crossing the end or beginning of the CPU
- address space. This is because if the length of the CPU address space (which is
- the granularity in this case) is not evenly divisible by the length of a scan
- line, then the scan line at the end of the CPU address will be in two different
- video memory which cannot be mapped into the CPU address space simultaneously.
-
- 5.1.3 Operating on data from different areas
-
- It is sometimes required or convenient to move or combine data from two
- different areas of video memory. One example of this is storing menus in the
- video memory beyond the displayed memory because there is hardware support in
- all VGAs for transferring 32 bits of video data with an 8 bit CPU read and
- write. Two separately mappable CPU video memory windows must be used if the
- distance between the source and destination is larger than the size of the CPU
- video memory window.
-
- 5.1.4 Combining data from two different windows
-
- The above example of moving data from one CPU video memory window to another CPU
- video memory only required read access to one window and only required write
- access to the other window. Sometimes it is convenient to have read access to
- both windows and write access to one window. An example of this would be a
- raster operation where the resulting destination is the source data logically
- combined with the original destination data.
-
- VESA Super VGA Standard VS911022-11
-
- 5.2 Different types of hardware windows
-
- Different hardware implementations of CPU video memory windows can be supported
- by the VESA BIOS extension. The information necessary for an application to
- understand the type of hardware implementation is provided by the BIOS to the
- application. There are three basic types of hardware windowing implementations
- and they are described below.
-
- The types of windowing schemes described below do not include differences in
- granularity.
-
- Also note that is possible for a VGA to use a CPU address space of 128k starting
- at segment A000h.
-
- 5.2.1 Single window systems
-
- Some hardware implementations only provide a single window. This single window
- will be readable as well as writeable. However, this causes a significant
- performance degradation when moving data in video memory a distance that is
- larger than the CPU address space.
-
- 5.2.2 Dual window systems
-
- Many Super VGAs provide two windows to facilitate moving data within video
- memory. There are two separate methods of providing two windows.
-
- 5.2.2.1 Overlapping windows
-
- Some hardware implementations distinguish window A and window B by determining
- if the CPU is attempting to do a memory read or a memory write operation. When
- the two windows are distinguished by whether the CPU is trying to read or write
- they can, and usually do, share the same CPU address space. However, one window
- will be read only and the other will be write only.
-
- 5.2.2.2 Non-overlapping windows
-
- Another mechanism used by two window systems to distinguish window A and window
- B is by looking at the CPU address within the total VGA CPU address space. When
- the two windows are distinguished by the CPU address within the VGA CPU address
- space the windows cannot share the same address space, but they can each be both
- read and written.
-
- VESA Super VGA Standard VS911022-12
-
- 6. Extended VGA BIOS
- ~~~~~~~~~~~~~~~~~~~~~~~~~
- Several new BIOS calls have been defined to support Super VGA modes. For
- maximum compatibility with the standard VGA BIOS, these calls are grouped under
- one function number. This number is passed in the AH register to the INT 10h
- handler.
-
- The designated Super VGA extended function number is 4Fh. This function number
- is presently unused in most, if not all, VGA BIOS implementations. A standard
- VGA BIOS performs no action when function call 4Fh is made. Super VGA Standard
- VS900602 defines subfunctions 00h through 07h. Subfunction numbers 08h through
- 0FFh are reserved for future use.
-
- 6.1 Status Information
-
- Every function returns status information in the AX register. The format of the
- status word is as follows:
-
- AL == 4Fh: Function is supported
- Al != 4Fh: Function is not supported
- AH == 00h: Function call successful
- AH == 01h: Function call failed
-
- Software should treat a non-zero value in the AH register as a general failure
- condition. In later versions of the VESA BIOS Extension new error codes might
- be defined.
-
- 6.2 Function 00h - Return Super VGA Information
-
- The purpose of this function is to provide information to the calling program
- about the general capabilities of the Super VGA environment. The function fills
- an information block structure at the address specified by the caller. The
- information block size is 256 bytes.
-
- Input: AH = 4Fh Super VGA support
- AL = 00h Return Super VGA information
- ES:DI = Pointer to buffer
-
- Output: AX = Status
- (All other registers are preserved)
-
- VESA Super VGA Standard VS911022-13
-
- The information block has the following structure:
-
- VgaInfoBlock STRUC
- VESASignature db 'VESA' ; 4 signature bytes
- VESAVersion dw ? ; VESA version number
- OEMStringPtr dd ? ; Pointer to OEM string
- Capabilities db 4 dup(?) ; capabilities of the video environment
- VideoModePtr dd ? ; pointer to supported Super VGA modes
- TotalMemory dw ? ; Number of 64kb memory blocks on board
- Reserved db 236 dup(?) ; Remainder of VgaInfoBlock
- VgaInfoBlock ENDS
-
- The VESASignature field contains the characters 'VESA' if this is a valid block.
-
- The VESAVersion is a binary field which specifies what level of the VESA
- standard the Super VGA BIOS conforms to. The higher byte specifies the major
- version number. The lower byte specifies the minor version number. The current
- VESA version number is 1.2. Applications written to use the features of a
- specific version of the VESA BIOS Extension, are guaranteed to work in later
- versions. The VESA BIOS Extension will be fully upwards compatible.
-
- The OEMStringPtr is a far pointer to a null terminated OEM-defined string. The
- string may used to identify the video chip, video board, memory configuration,
- etc. to hardware specific display drivers. There are no restrictions on the
- format of the string.
-
- The Capabilities field describes what general features are supported in the
- video environment. The bits are defined as follows:
-
- D0 = DAC is switchable
- 0 = DAC is fixed width, with 6-bits per primary color
- 1 = DAC width is switchable
- D1-31 = Reserved
-
- The VideoModePtr points to a list of supported Super VGA (VESA-defined as well
- as OEM-specific) mode numbers. Each mode number occupies one word (16 bits).
- The list of mode numbers is terminated by a -1 (0FFFFh). Please refer to
- chapter 2 for a description of VESA mode numbers. The pointer could point into
- either ROM or RAM, depending on the specific implementation. Either the list
- would be a static string stored in ROM, or the list would be generated at
- run-time in the information block (see above) in RAM. It is the application's
- responsibility to verify the current availability of any mode returned by this
- Function through the Return Super VGA mode information (Function 1) call. Some
- of the returned modes may not be available due to the video board's current
- memory and monitor configuration.
-
- The TotalMemory field indicates the amount of memory installed on the VGA
- board. Its value represents the number of 64kb blocks of memory currently
- installed.
-
- VESA Super VGA Standard VS911022-14
-
- 6.3 Function 01h - Return Super VGA mode information
-
- This function returns information about a specific Super VGA video mode that was
- returned by Function 0. The function fills a mode information block structure
- at the address specified by the caller. The mode information block size is
- maximum 256 bytes.
-
- Some information provided by this function is implicitly defined by the VESA
- mode number. However, some Super VGA implementations might support other video
- modes than those defined by VESA. To provide access to these modes, this
- function also returns various other information about the mode.
-
- Input: AH = 4Fh Super VGA support
- AL = 01h Return Super VGA mode information
- CX = Super VGA video mode
- (mode number must be one of those returned by Function 0)
- ES:DI = Pointer to 256 byte buffer
-
- Output: AX = Status
- (All other registers are preserved)
-
- The mode information block has the following structure:
-
- ModeInfoBlock STRUC
-
- ; mandatory information
-
- ModeAttributes dw ? ; mode attributes
- WinAAttributes db ? ; window A attributes
- WinBAttributes db ? ; window B attributes
- WinGranularity dw ? ; window granularity
- WinSize dw ? ; window size
- WinASegment dw ? ; window A start segment
- WinBSegment dw ? ; window B start segment
- WinFuncPtr dd ? ; pointer to windor function
- BytesPerScanLine dw ? ; bytes per scan line
-
- ; formerly optional information (now mandatory)
-
- XResolution dw ? ; horizontal resolution
- YResolution dw ? ; vertical resolution
- XCharSize db ? ; character cell width
- YCharSize db ? ; character cell height
- NumberOfPlanes db ? ; number of memory planes
- BitsPerPixel db ? ; bits per pixel
- NumberOfBanks db ? ; number of banks
- MemoryModel db ? ; memory model type
- BankSize db ? ; bank size in kb
- NumberOfImagePages db ? ; number of images
- Reserved db 1 ; reserved for page function
-
- VESA Super VGA Standard VS911022-15
-
- ; new Direct Color fields
-
- RedMaskSize db ? ; size of direct color red mask in bits
- RedFieldPosition db ? ; bit position of LSB of red mask
- GreenMaskSize db ? ; size of direct color green mask in bits
- GreenFieldPosition db ? ; bit position of LSB of green mask
- BlueMaskSize db ? ; size of direct color blue mask in bits
- BlueFieldPosition db ? ; bit position of LSB of blue mask
- RsvdMaskSize db ? ; size of direct color reserved mask in bits
- DirectColorModeInfo db ? ; Direct Color mode attributes
- Reserved db 216 dup(?) ; remainder of ModeInfoBlock
- ModeInfoBlock ENDS
-
- The ModeAttributes field describes certain important characteristics of the
- video mode. Bit D0 specifies whether this mode can be initialized in the
- present video configuration. This bit can be used to block access to a video
- mode if it requires a certain monitor type, and that this monitor is presently
- not connected. Prior to Version 1.2 of the VESA BIOS Extension, it was not
- required that the BIOS return valid information for the fields after
- BytesPerScanline. Bit D1 was used to signify if the optional information was
- present. Version 1.2 of the VBE requires that all fields of the ModeInfoBlock
- contain valid data, except for the Direct Color fields, which are valid only if
- MemoryModel field is set to a 6 (Direct Color) or 7 (YUV). Bit D1 is now
- reserved, and must be set to a 1. Bit D2 indicates whether the BIOS has support
- for output functions like TTY output, scroll, pixel output, etc. in this mode
- (it is recommended, but not mandatory, that the BIOS have support for all output
- functions). If bit D2 is 1 then the BIOS must support all of the standard
- output functions.
-
- The field is defined as follows:
-
- D0 = Mode supported in hardware
- 0 = Mode not supported in hardware
- 1 = Mode supported in hardware
- D1 = 1 (Reserved)
- D2 = Output functions supported by BIOS
- 0 = Output functions not supported by BIOS
- 1 = Output functions supported by BIOS
- D3 = Monochrome/color mode (see note below)
- 0 = Monochrome mode
- 1 = Color mode
- D4 = Mode type
- 0 = Text mode
- 1 = Graphics mode
- D5-D15 = Reserved
-
- VESA Super VGA Standard VS911022-16
-
- Note: Monochrome modes have their CRTC address at 3B4h. Color modes have their
- CRTC address at 3D4h. Monochrome modes have attributes in which only bit 3
- (video) and bit 4 (intensity) of the attribute controller output are
- significant. Therefore, monochrome text modes have attributes of off, video,
- high intensity, blink, etc. Monochrome graphics modes are two plane graphics
- modes and have attributes of off, video, high intensity, and blink. Extended
- two color modes that have their CRTC address at 3D4h are color modes with one
- bit per pixel and one plane. The standard VGA modes 06h and 11h would be
- classified as color modes, while the standard VGA modes 07h and 0Fh would be
- classified as monochrome modes.
-
- The BytesPerScanline field specifies how many bytes each logical scanline
- consists of. The logical scanline could be equal to or larger then the
- displayed scanline.
-
- VESA Super VGA Standard VS911022-17
-
- The WinAAttributes and WinBAttributes describe the characteristics of the CPU
- windowing scheme such as whether the windows exist and are read/writeable, as
- follows:
-
- D0 = Window supported
- 0 = Window is not supported
- 1 = Window is supported
- D1 = Window readable
- 0 = Window is not readable
- 1 = Window is readable
- D2 = Window writeable
- 0 = Window is not writeable
- 1 = Window is writeable
- D3-D7 = Reserved
-
- If windowing is not supported (bit D0 = 0 for both Window A and Window B), then
- an application can assume that the display memory buffer resides at the standard
- CPU address appropriate for the MemoryModel of the mode.
-
- WinGranularity specifies the smallest boundary, in KB, on which the window can
- be placed in the video memory. The value of this field is undefined if Bit D0
- of the appropriate WinAttributes field is not set.
-
- WinSize specifies the size of the window in KB.
-
- WinASegment and WinBSegment address specify the segment addresses where the
- windows are located in CPU address space.
-
- WinFuncAddr specifies the address of the CPU video memory windowing function.
- The windowing function can be invoked either through VESA BIOS function 05h, or
- by calling the function directly. A direct call will provide faster access to
- the hardware paging registers than using Int 10h, and is intended to be used by
- high performance applications. If this field is Null, then Function 05h must be
- used to set the memory window, if paging is supported.
-
- The XResolution and YResolution specify the width and height of the video mode.
- In graphics modes, this resolution is in units of pixels. In text modes, this
- resolution is in units of characters. Note that text mode resolutions, in units
- of pixels, can be obtained by multiplying XResolution and YResolution by the
- cell width and height, if the extended information is present.
-
- The XCharCellSize and YCharSellSize specify the size of the character cell in
- pixels.
-
- The NumberOfPlanes field specifies the number of memory planes available to
- software in that mode. For standard 16-color VGA graphics, this would be set to
- 4. For standard packed pixel modes, the field would be set to 1.
-
- The BitsPerPixel field specifies the total number of bits that define the color
- of one pixel. For example, a standard VGA 4 Plane 16-color graphics mode would
- have a 4 in this field and a packed pixel 256-color graphics mode would specify
- 8 in this field. The number of bits per pixel per plane can normally be derived
- by dividing the BitsPerPixel field by the NumberOfPlanes field.
-
- VESA Super VGA Standard VS911022-18
-
- The MemoryModel field specifies the general type of memory organization used in
- this mode. The following models have been defined:
-
- 00h = Text mode
- 01h = CGA graphics
- 02h = Hercules graphics
- 03h = 4-plane planar
- 04h = Packed pixel
- 05h = Non-chain 4, 256 color
- 06h = Direct Color
- 07h = YUV
- 08h-0Fh = Reserved, to be defined by VESA
- 10h-FFh = To be defined by OEM
-
- In Version 1.1 and earlier of the VESA Super VGA BIOS Extension, OEM defined
- Direct Color video modes with pixel formats 1:5:5:5, 8:8:8, and 8:8:8:8 were
- described as a Packed Pixel model with 16, 24, and 32 bits per pixel,
- respectively. In Version 1.2 and later of the VESA Super VGA BIOS Extension, it
- is recommended that Direct Color modes use the Direct Color MemoryModel and use
- the MaskSize and FieldPosition fields of the ModeInfoBlock to describe the pixel
- format. BitsPerPixel is always defined to be the total memory size of the
- pixel, in bits.
-
- The NumberOfBanks field specifies the number of banks in which the scan lines
- are grouped. The remainder from dividing the scan line number by the number of
- banks is the bank that contains the scan line and the quotient is the scan line
- number within the bank. For example, CGA graphics modes have two banks and
- Hercules graphics mode has four banks. For modes that don't have scanline banks
- (such as VGA modes 0Dh-13h), this field should be set to 1.
-
- The BankSize field specifies the size of a bank (group of scan lines) in units
- of 1KB. For CGA and Hercules graphics modes this is 8, as each bank is 8192
- bytes in length. For modes that don't have scanline banks (such as VGA modes
- 0Dh-13h), this field should be set to 0.
-
- The NumberOfImagePages field specifies the number of additional complete display
- images that will fit into the VGA's memory, at one time, in this mode. The
- application may load more than one image into the VGA's memory if this field is
- non-zero, and flip the display between them.
-
- The Reserved field has been defined to support a future VESA BIOS extension
- feature and will always be set to one in this version.
-
- The RedMaskSize, GreenMaskSize, BlueMaskSize, and RsvdMaskSize fields define the
- size, in bits, of the red, green, and blue components of a direct color pixel.
- A bit mask can be constructed from the MaskSize fields using simple shift
- arithmetic. For example, the MaskSize values for a Direct Color 5:6:5 mode
- would be 5, 6, 5, and 0, for the red, green, blue, and reserved fields,
- respectively. Note that in the YUV MemoryModel, the red field is used for V,
- the green field is used for Y, and the blue field is used for U. The MaskSize
- fields should be set to 0 in modes using a MemoryModel that does not have pixels
- with component fields.
-
- VESA Super VGA Standard VS911022-19
-
- The RedFieldPosition, GreenFieldPosition, BlueFieldPosition, and
- RsvdFieldPosition fields define the bit position within the direct color pixel
- or YUV pixel of the least significant bit of the respective color component. A
- color value can be aligned with its pixel field by shifting the value left by
- the FieldPosition. For example, the FieldPosition values for a Direct Color
- 5:6:5 mode would be 11, 5, 0, and 0, for the red, green, blue, and reserved
- fields, respectively. Note that in the YUV MemoryModel, the red field is used
- for V, the green field is used for Y, and the blue field is used for U. The
- FieldPosition fields should be set to 0 in modes using a MemoryModel that does
- not have pixels with component fields.
-
- The DirectColorModeInfo field describes important characteristics of direct
- color modes. Bit D0 specifies whether the color ramp of the DAC is fixed or
- programmable. If the color ramp is fixed, then it can not be changed. If the
- color ramp is programmable, it is assumed that the red, green, and blue lookup
- tables can be loaded using a standard VGA DAC color registers BIOS call
- (AX=1012h). Bit D1 specifies whether the bits in the Rsvd field of the direct
- color pixel can be used by the application or are reserved, and thus unusable.
-
- D0 = Color ramp is fixed/programmable
- 0 = Color ramp is fixed
- 1 = Color ramp is programmable
- D1 = Bits in Rsvd field are usable/reserved
- 0 = Bits in Rsvd field are reserved
- 1 = Bits in Rsvd field are usable by the application
-
- Notes
- ~~~~~
- Version 1.1 and later VESA BIOS extensions will zero out all unused fields in
- the Mode Information Block, always returning exactly 256 bytes. This
- facilitates upward compatibility with future versions of the standard, as any
- newly added fields will be designed such that values of zero will indicate
- nominal defaults or non-implementation of optional features (for example, a
- field containing a bit-mask of extended capabilities would reflect the absence
- of all such capabilities). Applications that wish to be backwards compatible to
- Version 1.0 VESA BIOS extensions should pre-initialize the 256 byte buffer
- before calling Return Super VGA mode information.
-
- VESA Super VGA Standard VS911022-20
-
- 6.4 Function 02h - Set Super VGA video mode
-
- This function initializes a video mode. The BX register contains the mode to
- set. The format of VESA mode numbers is described in chapter 2. If the mode
- cannot be set, the BIOS should leave the video environment unchanged and return
- a failure error code.
-
- Input: AH = 4Fh Super VGA support
- AL = 02h Set Super VGA video mode
- BX = Video mode
- D0-D14 = Video mode
- D15 = Clear memory flag
- 0 = Clear video memory
- 1 = Don't clear video memory
-
- Output: AX = Status
- (All other registers are preserved)
-
- 6.5 Function 03h - Return current video mode
-
- This function returns the current video mode in BX. The format of VESA video
- mode numbers is described in chapter 2 of this document.
-
- Input: AH = 4Fh Super VGA support
- AL = 03h Return current video mode
-
- Output: AX = Status
- BX = Current video mode
- (All other registers are preserved)
-
- Notes
- ~~~~~
- In a standard VGA BIOS, function 0Fh (Read current video state) returns the
- current video mode in the AL register. In D7 of AL, it also returns the status
- of the memory clear bit (D7 of 40:87). This bit is set if the mode was set
- without clearing memory. In this Super VGA function, the memory clear bit will
- not be returned in BX since the purpose of the function is to return the video
- mode only. If an application wants to obtain the memory clear bit, it should
- call VGA BIOS function 0Fh.
-
- VESA Super VGA Standard VS911022-21
-
- 6.6 Function 04h - Save/Restore Super VGA video state
-
- These functions provide a mechanism to save and restore the Super VGA video
- state. The functions are a superset of the three subfunctions under standard
- VGA BIOS function 1Ch (Save/restore video state). The complete Super VGA video
- state (except video memory) should be saveable/restoreable by setting the
- requested states mask (in the CX register) to 000Fh.
-
- Input: AH = 4Fh Super VGA support
- AL = 04h Save/restore Super VGA video state
- DL = 00h Return save/restore state buffer size
- CX = Requested states
- D0 = Save/restore video hardware state
- D1 = Save/restore video BIOS data state
- D2 = Save/restore video DAC state
- D3 = Save/restore Super VGA state
-
- Output: AX = Status
- BX = Number of 64-byte blocks to hold the state buffer
- (All other registers are preserved)
-
-
- Input: AH = 4Fh Super VGA support
- AL = 04h Save/restore Super VGA video state
- DL = 01h Save Super VGA video state
- CX = Requested states (see above)
- ES:BX = Pointer to buffer
-
- Output: AX = Status
- (All other registers are preserved)
-
-
- Input: AH = 4Fh Super VGA support
- AL = 04h Save/restore Super VGA video state
- DL = 02h Restore Super VGA video state
- CX = Requested states (see above)
- ES:BX = Pointer to buffer
-
- Output: AX = Status
- (All other registers are preserved)
-
- Notes
- ~~~~~
- Due to the goal of complete compatibility with the VGA environment, the standard
- VGA BIOS function 1Ch (Save/restore VGA state) has not been extended to save the
- Super VGA video state. VGA BIOS compatibility requires that function 1Ch
- returns a specific buffer size with specific contents, in which there is no room
- for the Super VGA state.
-
- VESA Super VGA Standard VS911022-22
-
- 6.7 Function 05h - CPU Video Memory Window Control
-
- This function sets or gets the position of the specified window in the video
- memory. The function allows direct access to the hardware paging registers. To
- use this function properly, the software should use VESA BIOS Function 01h
- (Return Super VGA mode information) to determine the size, location, and
- granularity of the windows.
-
- Input: AH = 4Fh Super VGA support
- AL = 05h Super VGA video memory window control
- BH = 00h Select Super VGA video memory window
- BL = Window number
- 0 = Window A
- 1 = Window B
- DX = Window position in video memory
- (in window granularity units)
-
- Output: AX = Status
- (See notes below)
-
-
- Input: AH = 4Fh Super VGA support
- AL = 05h Super VGA video memory window control
- BH = 01h Return Super VGA video memory window
- BL = Window number
- 0 = Window A
- 1 = Window B
-
- Output: AX = Status
- DX = Window position in video memory
- (in window granularity units)
- (See notes below)
-
- Notes
- ~~~~~
- This function is also directly accessible through a far call from the
- application. The address of the BIOS function may be obtained by using VESA
- BIOS Function 01h, Return Super VGA mode information. A field in the
- ModeInfoBlock contains the address of this function. Note that this function
- may be different among video modes in a particular BIOS implementation, so the
- function pointer should be obtained after each set mode.
-
- In the far call version, no status information is returned to the application.
- Also, the AX and DX registers will be destroyed. Therefore, if AX and/or DX
- must be preserved, the application must do so priot to making the far call.
-
- The application must load the input arguments in BH, BL, and DX (for set window)
- but does not need to load either AH or AL in order to use the far call version
- of this function.
-
- VESA Super VGA Standard VS911022-23
-
- 6.8 Function 06h - Set/Get Logical Scan Line Length
-
- This function sets or gets the length of a logical scan line. This function
- allows an application to set up a logical video memory buffer that is wider than
- the displayed area. Function 07h then allows the application to set the
- starting position that is to be displayed.
-
- Input: AH = 4Fh Super VGA support
- AL = 06h Logical Scan Line Length
- BL = 00h Select Scan Line Length
- CX = Desired width in pixels
-
- Output: AX = Status
- BX = Bytes Per Scan Line
- CX = Actual Pixels Per Scan Line
- DX = Maximum Number of Scan Lines
-
-
- Input: AH = 4Fh Super VGA support
- AL = 06h Logical Scan Line Length
- BL = 01h Return Scan Line Length
-
- Output: AX = Status
- BX = Bytes Per Scan Line
- CX = Actual Pixels Per Scan Line
- DX = Maximum Number of Scan Lines
-
- Notes
- ~~~~~
- The desired width in pixels may not be achieveable because of VGA hardware
- considerations. The next larger value will be selected thta will accommodate
- the desired number of pixels, and the actual number of pixels will be returned
- in CX. BX returns a value that, when added to a pointer into video memory, will
- point to the next scan line. For example, in a mode 13h this would be 320, but
- in mode 12h this would be 80. DX returns the number of logical scan lines based
- upon the new scan line length and the total memory installed and useable in this
- display mode. This function is also valid in text modes. In text modes, the
- application should find out the current character cell width through normal BIOS
- functions, multiply that times the desired number of characters per line, and
- pass the value in the CX register.
-
- VESA Super VGA Standard VS911022-24
-
- 6.9 Function 07h - Set/Get Display Start
-
- This function selects the pixel to be displayed in the upper left corner of the
- display from the logical page. This function can be used to pan and scroll
- around logical screens that are larger than the displayed screen. This function
- can also be used to rapidly switch between two different displayed screens for
- double buffered animation effects.
-
- Input: AH = 4Fh Super VGA support
- AL = 07h Display Start Control
- BH = 00h Reserved and must be 0
- BL = 00h Select Display Start
- CX = First Displayed Pixel in Scan Line
- DX = First Displayed Scan Line
-
- Output: AX = Status
-
-
- Input: AH = 4Fh Super VGA support
- AL = 07h Display Start Control
- BL = 01h Return Display Start
-
- Output: AX = Status
- BH = 00h Reserved and will be 0
- CX = First Displayed Pixel in Scan Line
- DX = First Displayed Scan Line
-
- Notes
- ~~~~~
- This function is also valid in text modes. In text modes, the application
- should find out the current character cell width through normal BIOS functions,
- multiply that times the desired starting character column, and pass that value
- in the CX register. It should also multiply the current character cell height
- times the desired starting character row, and pass that value in the DX
- register.
-
- VESA Super VGA Standard VS911022-25
-
- 6.10 Function 08h - Set/Get DAC Palette Control
-
- This function queries and selects the operating mode of the DAC palette. Some
- DACs are configurable to provide 6-bits, 8-bits, or more of color definition per
- red, green, and blue primary color. The DAC palette width is assumed to be
- reset to standard VGA 6-bits per primary during a standard or VESA Set Super VGA
- Mode (AX = 4F02h) call.
-
- Input: AH = 4Fh Super VGA support
- AL = 08h Set/Get DAC Palette Control
- BL = 00h Set DAC palette width
- BH = Desired number of bits of color per primary
- (Standard VGA = 6)
-
- Output: AX = Status
- BH = Current number of bits of color per primary
- (Standard VGA = 6)
-
-
- Input: AH = 4Fh Super VGA support
- AL = 08h Set/Get DAC Palette Control
- BL = 01h Get DAC palette width
-
- Output: AX = Status
- BH = Current number of bits of color per primary
- (Standard VGA = 6)
-
- Notes
- ~~~~~
- An application can find out if DAC switching is available by querying Bit D0 of
- the Capabilities field of the VgaInfoBlock structure returned by VESA Return
- Super VGA Information (AX = 4F00h). The application can then attempt to set the
- DAC palette width to the desired value. If the Super VGA is not capable of
- selecting the requested palette width, then the next lower value that the Super
- VGA is capable of will be selected. The resulting palette width is returned.
-
- VESA Super VGA Standard VS911022-26
-
- 7. Application Example
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~
- The following sequence illustrates how an application interface to the VESA BIOS
- Extension. The hypothetical application is VESA-aware and calls the VESA BIOS
- functions. However, the application is not limited to supporting just
- VESA-defined video modes. This it will inquire what video modes are available
- before setting up the video mode.
-
- 1) The application would first allocate a 256 byte buffer. This buffer
- will be used by the VESA BIOS to return information about the video
- environment. Some applications will statically allocate this buffer,
- others will use system calls to temporarily obtain buffer space.
-
- 2) The application would then call VESA BIOS function 00h (Return Super VGA
- information). If the AX register does not contain 004Fh on return from
- the function call, the application can determine that the VESA BIOS
- Extension is not present and handle such situation.
-
- If no error code is passed in AX, the function call was successful. The
- buffer has been filled by the VESA BIOS Extension with various
- information. The application can verify that indeed this is a valid
- VESA block by identifying the characters 'VESA' in the beginning of the
- block. The application can inspect the VESAVersion field to determine
- whether the VESA BIOS Extension ha sufficient functionality. The
- application may use the OEMStringPtr to locate OEM-specific information.
-
- Finally, the application can obtain a list of the supported Super VGA
- modes by using the VideoModePtr. This field points to a list of the
- video modes supported by the video environment.
-
- 3) The application would then create a new buffer and call the VESA BIOS
- function 01h (Return Super VGA mode information) to obtain information
- about the supported video modes. Using the VideoModePtr obtained in
- step 2) above, the application would call this function with a new mode
- number until a suitable video mode is found. If no appropriate video
- mode is found, it is up to the application to handle this situation.
-
- The Return Super VGA mode information function fills a buffer specified
- by the application with information describing the features of the video
- mode. The data block contains all the information an application needs
- to take advantage of the video mode.
-
- The application would examine the ModeAttributes field. To verify that
- the mode indeed is supported, the application would inspect bit D0. If
- D0 is clear, then the mode is not supported by the hardware. This might
- happen is a specific mode requires a certain type of monitor but that
- monitor is not present.
-
- 4) After the application has selected a video mode, the next step is to
- initialize the mode. However, the application might first want to save
- the present video mode. When the application exits, this mode would be
- restored. To obtain the present video mode, the VESA BIOS function 03h
- (Get Super VGA mode) would be used. If a non-VESA (standard VGA or
- OEM-specific) mode is in effect, only the lower byte in the mode number
- is filled. The upper byte is cleared.
-
- 5) To initialize the video mode, the application would use VESA BIOS
- function 02h (Set Super VGA mode). The application has from this point
- on full access to the VGA hardware and video memory.
-
- VESA Super VGA Standard VS911022-27
-
- 6) When the application is about to terminate, it would restore the prior
- video mode. The prior video mode, obtained in step 4) above could be
- either a standard VGA mode, OEM-specific mode, or VESA-supported mode.
- It would reinitialize the video mode by calling VESA BIOS function 02h
- (Set Super VGA mode). The application would then exit.
-